// 数字
// 1. 判断浮点数计算的误差
function withinErrorMargin(left, right) {
  return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2)
}
let f1 = () => {
  let flag = withinErrorMargin(0.1 + 0.2, 0.3)
  console.log(flag)
  console.log(0.1 + 0.2 === 0.3)
}

// 2. 判断数字是否是有限的
let f2 = () => {
  let res = 1 / 0
  console.log(res) // Infinity
  console.log(Number.isFinite(res)) // false 表示Infinity不是有限的数字
}

// 3. 判断是否是整数
let f3 = () => {
  let num = 12.3
  // // 函数是判断item是否是整数
  // function isInteger(item) {
  //   // 不是数字返回false
  //   if (typeof item !== 'number') {
  //     return false
  //   }
  //   item = item.toString()
  //   // 判断字符串中有没有点
  //   let index = item.indexOf('.')
  //   return index === -1
  // }
  console.log(Number.isInteger(num))
  let rt = Number(12.3).toFixed(2)
  console.log(rt)
}

// 4. BigInt
let f4 = () => {
  // 20!
  // let p = 1n
  // for (let i = 1n; i <= 20n; i++) {
  //   p *= i
  // }
  // console.log(p) // 2432902008176640000n
  // 判断多少的阶乘刚好超出整数范围
  let i = 1
  let p = 1
  while (1) {
    p *= i
    if (p >= Number.MAX_SAFE_INTEGER) {
      break
    }
    i++
  }
  console.log(i, p, Number.MAX_SAFE_INTEGER)
}
f4()
